/*
 * 文件名：IFeeBillDetailService.java
 * 描述：
 * 修改人：Administrator
 * 修改时间：2016年4月19日
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */

package com.zcsy.manage.service.property;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.zcsy.manage.model.property.FeeBill;
import com.zcsy.manage.model.property.FeeBillDetail;
import com.zcsy.manage.model.system.User;

public interface IFeeBillDetailService {

    /**
     * @Description 插入缴费详情信息<br>
     * @param record
     *            缴费对象
     * @return 1：插入成功；0：插入失败
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    int insert(FeeBillDetail record);

    /**
     * @Description 更新缴费详情信息<br>
     * @param record
     *            缴费对象
     * @return 1：更新成功；0：更新失败
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    int updateByPrimaryKey(FeeBillDetail record);

    /**
     * @Description 根据主键删除缴费详情信息<br>
     * @param id
     *            主键id
     * @return 1：删除成功；0：删除失败
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    int deleteByPrimaryKey(String id);

    /**
     * @Description 根据主键获取缴费详情信息详情<br>
     * @param id
     *            主键id
     * @return 缴费对象
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    FeeBillDetail selectByPrimaryKey(String id);
    
    
    /**
     * @Method: selectByBillID
     * @Description 根据订单id查询缴费详情
     * @param id
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年6月30日
     * @see 
     */
    FeeBillDetail selectByBillID(String billId);
    
    /**
     * @Description 根据房间号获取最近一条缴费详情信息详情<br>
     * @param houseId
     *            房间号
     * @return 缴费对象
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    FeeBillDetail selectLastBill(String houseId);

    /**
     * @Description 根据房间号获取缴费详情信息列表<br>
     * @param houseId
     *            房间号
     * @return 缴费详情列表
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    List<FeeBillDetail> selectByHouseId(String houseId);
    
    /**
     * @Description 根据关键字获取缴费详情信息列表<br>
     * @param record
     *            缴费详情对象
     * @return 缴费详情列表
     * @author xujl
     * @date 2016年4月14日
     * @see
     */
    List<FeeBill> selectByKeyword(FeeBillDetail record);
    
    /**
     * @Method: selectFeeBillDetailByHouseId
     * @Description 根据房屋id查询欠费详情
     * @param housesID
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月5日
     * @see 
     */
    List<FeeBillDetail> selectFeeBillDetailByHouseId(List<String> housesID);
    
    /**
     * @Description 根据房屋查询物业信息详单
     * @param houseId
     * @return
     */
    FeeBillDetail getHouseWithProperty(String houseId);

    /** 
     * @Title: payBill 
     * @Description: 物业费缴费成功
     * @param @param billId 账单id
     * @param @param payResult 支付对象信息     
     * @return void     
     * @throws 
     */
    void payFeeBill(String billId , Object payResult);
    
    /** 
     * @Title: submitFeeOrder 
     * @Description: 物业费我要缴费
     * @param @param houseId 房屋ID
     * @param @param months 缴费月数
     * @param @param billTitle 发票
     * @param @param user 当前用户
     * @param @return     
     * @return FeeBillDetail     
     * @throws 
     */
    FeeBillDetail submitFeeOrder(String houseId, Integer months, String billTitle , User user);
    
    /** 
     * @Title: getBillByHouse 
     * @Description: 根据房屋ID获取对应的账单信息
     * @param @param houseId 房屋ID
     * @param @return     
     * @return FeeBill     
     * @throws 
     */
    FeeBill getBillByHouse(String houseId , String cellId);
    
    List<FeeBillDetail> selectByHouseIdAndState(String houseId);
    
    void backGroundPay(Date beginD,Date endD,String houseId, Integer month, User user, String billId, Integer billType, BigDecimal area,
            BigDecimal rate, BigDecimal unitPrice, String billTitle, BigDecimal money);
    
    /**
     * @description 计算两个日期之间的月份差
     * @param beginDate 开始日期
     * @param endDate 结束日期
     * @return
     * int
     * @author chenxin
     * @date 2016年9月23日下午3:44:45
     */
    int getDiffMonth(Date beginDate, Date endDate);
}
